package com.dems.core.util;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.ByteArrayOutputStream;
import java.util.List;

@Slf4j
@Component
public class EasyExcelUtil<T>{


    /**生成一个读取数据库数据产生的excel字节文件
    *  最普通的EasyExcel用法
    *  返回excel文件数据流
    */
    public ByteArrayOutputStream easyOut(Class<T> clazz, List<T> ... list) throws Exception{
        //上传文件的命名规则，暂时没写
        String extension = ExcelTypeEnum.XLSX.getValue();

        //建立一个字节数组输出流，将excel文件的内容存入其中
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        /**
         *   这里指定用哪个class去写，然后写到第一个sheet，名字为模板，然后文件流会自动关闭
         *   这里可以定义表格的各种样式
         *   out为字节流
         *   clazz为实体类的反射
         */
        ExcelWriter excelWriter = null;
        try {
            excelWriter = EasyExcel.write(out).build();
            int i = 0;
            WriteSheet writeSheet;
            for (List<T> ts : list) {
                writeSheet = EasyExcel.writerSheet("Sheet" + i++).head(clazz).build();
                excelWriter.write(ts, writeSheet);
            }
        } catch (Exception e) {
            log.error("excel 文件生成异常", e);
        } finally {
            if (null != excelWriter) {
                excelWriter.finish();
            }
        }

        return out;
    }
}